﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;


namespace Luzes
{
    class Luzes
    {

        public TipoEfeitosBasico tipoAtual;
        public Vector3 direcaoLuz3;

        public enum TipoEfeitosBasico
        {

            Nenhum,
            LuzesAmbiente,
            UmaLuz,
            DuasLuzes,
            TresLuzes,
            IluminacaoPadrao,
            Especular,
            Emissiva,
            Texturizada,
            Fumaça,

        }

        public Luzes(TipoEfeitosBasico tipo, BasicEffect efeitoBasico, Vector3 cameraPos, Camera.Camera camera)
        {

            this.tipoAtual = tipo;
            direcaoLuz3 = new Vector3(1, -1f, 0);
            switch (tipoAtual)
            {

                case TipoEfeitosBasico.UmaLuz:
                    efeitoBasico.LightingEnabled = true;
                    efeitoBasico.DirectionalLight0.Enabled = true;
                    efeitoBasico.DirectionalLight0.DiffuseColor = Color.Blue.ToVector3();
                    efeitoBasico.DirectionalLight0.Direction = Vector3.Normalize(
                        new Vector3(-1, -1f, 0));
                    break;

                case TipoEfeitosBasico.DuasLuzes:
                    efeitoBasico.LightingEnabled = true;
                    efeitoBasico.DirectionalLight0.Enabled = true;                   
                    efeitoBasico.DirectionalLight0.DiffuseColor = Color.Blue.ToVector3();
                    efeitoBasico.DirectionalLight0.Direction = Vector3.Normalize(
                        new Vector3(-1, -1f, 0));
                    efeitoBasico.DirectionalLight1.Enabled = true;
                    efeitoBasico.DirectionalLight1.DiffuseColor = Color.Red.ToVector3();
                    efeitoBasico.DirectionalLight1.Direction = Vector3.Normalize(
                        new Vector3(1, -1f, 0));
                    break;

                case TipoEfeitosBasico.TresLuzes:
                    efeitoBasico.LightingEnabled = true;
                    efeitoBasico.DirectionalLight0.Enabled = true;                   
                    efeitoBasico.DirectionalLight0.DiffuseColor = Color.Blue.ToVector3();
                    efeitoBasico.DirectionalLight0.Direction = Vector3.Normalize(
                        new Vector3(-1, -1f, 0));
                    efeitoBasico.DirectionalLight1.Enabled = true;
                    efeitoBasico.DirectionalLight1.DiffuseColor = Color.Red.ToVector3();
                    efeitoBasico.DirectionalLight1.Direction = Vector3.Normalize(
                        new Vector3(1, -1f, 0));
                    efeitoBasico.DirectionalLight2.Enabled = true;
                    efeitoBasico.DirectionalLight2.DiffuseColor = Color.Green.ToVector3();
                    efeitoBasico.DirectionalLight2.Direction = direcaoLuz3;
                    break;

                case TipoEfeitosBasico.Fumaça:
                    cameraPos = new Vector3(20, 20, 20);
                    camera.vista = Matrix.CreateLookAt(new Vector3(0,8,22), Vector3.Zero, Vector3.Up);
                    efeitoBasico.EnableDefaultLighting();
                    efeitoBasico.SpecularColor = Vector3.Zero;
                    efeitoBasico.PreferPerPixelLighting = true;
                    efeitoBasico.FogColor = Color.Red.ToVector3();
                    efeitoBasico.FogEnabled = true;
                    efeitoBasico.FogStart = 10.0f;
                    efeitoBasico.FogEnd = 40.0f;
                    break;

            }

        }

        public void Update(GameTime gameTime, KeyboardState teclado, BasicEffect efeitoBasico)
        {


            if (teclado.IsKeyDown(Keys.Left))
            {

                direcaoLuz3.X -= 0.1f;

            }

            if (teclado.IsKeyDown(Keys.Right))
            {

                direcaoLuz3.X += 0.1f;

            }

            if (teclado.IsKeyDown(Keys.Up))
            {

                direcaoLuz3.Y -= 0.1f;

            }

            if (teclado.IsKeyDown(Keys.Down))
            {

                direcaoLuz3.Y += 0.1f;

            }

            efeitoBasico.DirectionalLight2.Direction = direcaoLuz3;

        }

    }
}
